Java 學習筆記 02 – 變數與資料型別


Posted by vickyh1315 on 2024-03-25

跟其他的程式語言一樣,Java 也具變數與資料型別的概念。

變數

變數宣告
相對於 Python, JavaScript...,Java 是較為嚴謹的程式語言風格(強型別語言),編譯器要知道存取需要多少空間,宣告變數時需要指定資料型別。

int numInt = 10;
float numFloat = 10.0f, double numDouble = 10.0;
char ch = 'a';
boolean bl = true;

當宣告完變數(numA),將不同型別的變數互相指派給變數(numB → numA),有時候會報錯,是因為每個型別被分配的記憶體都不一樣,遇到這問題,就得進行「型別轉換」。

int a = 10;
float b = 10.0f;
a = b; // Error

Java 儲存變數的記憶體分配方式舉例

Memory Location value Name
5004
5008 10 a
5012 10.0f b

(因為 b 需要記憶體大小 > a 需要記憶體大小,下面會提到)

變數的命名上有幾個原則:

  1. 接受英文字母、數字、_$符號
  2. 開頭不能是數字
  3. 不能包含空格
  4. 不能使用關鍵字或保留字(如:public, int...)
  5. 區分大小寫
    建議命名時使用駝峰命名法(CamelCase),與類別或其他作區別。

資料型別

用來定義變數或常數的型態,Java 的資料型別分成兩種類型:基本資料型別(Primitive Type)與參考資料型別(Reference Type)。強型別的特性,分配給底下不同資料型別的記憶體大小也不同,決定變數或常數可以儲存的資料範圍。

探討資料型別以前,先來說說常值(literal,或被稱為字面常數),代表在程式碼裡固定資料的寫法格式,也是我們常在說的「值」,前面看到的 10, 10.0, 10.0f, 'a', "Hi", true 這些,都屬於常值(要注意的是字串是參考型別,非原始型別,後面會提到)。

// 資料型別 變數名稱 = 常值
int data = 1;

基本資料型別(Primitive Type)

Integer
byte, short, int, long
Floating Point
float, double
Boolean
boolean
Character
char

基本型別底下的各種常值有固定的記憶體長度跟有效範圍,以下以類別分類,逐個說明常值:

整數 Integer
byte numByte = 12;
short numShort = 128;
int numInt = 12345;
long numLong = 323593550;
long numLong2 = 15000000000L;

整數類別預設指 int,當超過 int 的範圍才會用到 long(宣告 long 型常數後面需要加上 l 或 L)

整數可用二進位、十進位、八進位、十六進位表示:
二進位制: 0b101, 0B101(十進位表示為 5)
八進位制: 014(十進位表示為 12)
十六進位制: 0x1A, 0X1A(十進位表示為26)

型別 位元數 範圍
byte 8 -128 ~ +127
short 16 -2^15 ~ 2^15-1
int 32 -2^31 ~ 2^31-1
long 64 -2^63 ~ -2^63-1
浮點數 Float Point

當用到小數點時就必須使用浮點數,浮點數可以用兩種方式表達:

  1. 常見的小數點,例如 3.14
  2. 科學符號(使用 IEEE-754 的規範),例如 1.23e+4
    預設型別為 double (倍精度浮點數),如果要指定 float 的話在數字後面加上 f 或 F 就可以。
型別 位元數 範圍
float 32 -2^128 ~ +2^127
double 64 -2^1024 ~ +2^1023
布林 Boolean

布林常值只有 true 和 false 兩種情況,只表示一位元 0 或 1 的資料,比較其他常值,型別大小沒特別被 Java 精確定義。另外需注意在 Java 不允許使用數值 1 和 0 代替 true 和 false。

型別 位元數 範圍
boolean true or false
字元 Character

Java 使用 Unicode 來表示所有的字元,例如 'a', '5', '嗨' 都是合法的字元常值,以及跳脫字元也包含在內。
一般字元表示方式: 'a', '字', '%'
轉役序列表示方式: '\n', '\', '\r'
Unicode 表示方式: '\u5b57'

型別 位元數 範圍
char 16 ISO 萬用碼 (Unicode) '\u0000' (0) 到 '\uffff' (65,535)
數值資料大小比較

double > float > long > int > short > byte

常數 Constant

一般來說,會使用變數去儲存值(常值),隨著程式執行或計算需要,會改變原本儲存的值,但假設某些值不想在程式中被改變,就可以宣告為常數
通常會使用 final 關鍵字 + 大寫字母配底線宣告常數,像是

// 常數宣告要大寫,分隔單字使用底線
final int MAX_SIZE = 100;

Java 原生類別中也有定義好的常數,以 Byte 為例子:

Byte.SIZE
Byte.BYTES
Byte.MAX_VALUE
Byte.MIN_VALUE

名詞比較

常值:就是一般說的值,像整數、浮點數,到字元、字串都是常值。

變數:宣告指定名稱跟型別,方便程式運作需要重複取用值(常值)時,可以直接到記憶體取值,也因需要記憶體空間存放,宣告時需要同時指定名稱跟資料型態。

常數:有些常值在程式執行過程不會變動(例如:圓周率、稅率…),通常會用常數的型態儲存它們,


#java







Related Posts

資訊安全:湊雜與加密

資訊安全:湊雜與加密

OOP 13 - Dependency Inversion Principle

OOP 13 - Dependency Inversion Principle

Javascript - 基礎

Javascript - 基礎


Comments